package com.ftg.learn.day03;

import javax.swing.plaf.synth.SynthGraphicsUtils;

/**
 * 学习位运算符
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/7/10 上午8:23
 */
public class Options4 {

    public static void main(String[] args) {


//        &  位与运算符

//        int a = 9;
//
//        int b = 13;
//
//        System.out.println(a + b);
//
//        //& 正数与运算 表示把所有的数全部转换成为 二进制 然后 按位与,同真为真一假为假
//        System.out.println(a & b);
//        9:  0000 1001
//        13: 0000 1101

//23 & 24
//13 & 18
//19 & 21
//23 & 0

        //介绍一个类  包装类  引用类型
//        新的引用类型
//    Integer

//        Integer 是int的包装类，我就是平安类  类型一致
        System.out.println(Integer.toBinaryString(23));
        System.out.println(Integer.toBinaryString(24));

//        | 位或运算符  一真为真，全假为假

//        99 | 87
//        37 | 0
//        24 | 67

        //正整数和  原码  反码 补码一致

        System.out.println(-4 & 4);
        //位数最右侧为符号位  0 为正数  1为负数
        //正数的二进制的表示   计算机当中所有参与运算的不是原码  补码
//        1000 0100   : 原码  反码 补码
        // 原码 --->  反码 --->  补码
        System.out.println(~4);
        System.out.println(~-4);


        System.out.println(Integer.toBinaryString(-4));
        System.out.println(Integer.toBinaryString(4));
        System.out.println(-4 & 4);


//        11111111111111111111111111111100 -4 的原码
//        00000000000000000000000000000011 -4 反码
//        00000000000000000000000000000100 -4 反码 + 1 ===》补码
//        00000000000000000000000000000100

//        -8
//        原码 : 1 11111111111111111111111111111000
//        反码 : 0 00000000000000000000000000000111
//        补码 ：0 00000000000000000000000000001000
//              0 00000000000000000000000000000100 原码
//        -8 | 4
//        0 00000000000000000000000000000100 原码
//        0 00000000000000000000000000000100 反码
//        0 00000000000000000000000000000100 补码

//        结果为：0 00000000000000000000000000001100 补码
        //反码 -1
        //0 00000000000000000000000000001100   1011
        //1 11111111111111111111110100       原码 : 计算机输出的是原码
        System.out.println(-8 & 4);
        System.out.println(-8 | 4);

//        -4
//            1 --- 100  原
//            0 --- 011  反
//            0 --- 100  补
//            //参与运算
//            0 --- 011  反
//            1 --- 100  原

        System.out.println(Math.abs(-4));

//        ^ 求不同  相同为假不同为真
        int ca = 4;
        int ba = 2;

        ca = ca ^ ba;
        //ca = 6;

        ba = ca ^ ba;
        // ba = 4;

        ca = ca ^ ba;

//        >>，<<，>>>
//        位  移位运算符

        int aint = 7;
        // 0000 0111
        //右移一位 : 效果为 右侧少一个 左侧加一个 正数加0 右移小
        // 0000 0011
//        System.out.println(aint >> 2);

//        << 左移 ： 变大 去掉左侧  右侧添加  14
        System.out.println(aint << 4);
        // 0000 0111
        // 000 01110

        //有符号右移 正  负
        int afint = -2;
        System.out.println(-32 >> 1);

        //有符号左移
        System.out.println(-4 << 1);

        //无符号右移 >>>
        System.out.println(-14 >>> 1);
        System.out.println(1 >>> 1);

        System.out.println(2 > 3 && 3 < 4);
        System.out.println(2 < 3 && 3 < 4);
        System.out.println(2 < 3 || 3 < 4);


        byte s = 1;
        s += 1;

        int age = 38;
        String name = "康加修";
        System.out.println("我的年龄是" + age + "我的姓名是" + name);

        //按格式化输出
        System.out.printf("我的年龄是%d我的姓名是%s\n", age, name);

        int t = 100;

        System.out.println(t > 60 ? "及格" : "不及格");

        //0 -100 0- 60 不及格  70 及格 80  良  90  优  100 优+

        String mess = t < 60 ? "不及格" :
                t < 70 ?
                        "及格" :
                        t < 80 ?
                                "良" :
                                t < 90 ? "优" : "优+";
        System.out.println(mess);

        System.out.println(-22 | 33);
        System.out.println(Integer.toBinaryString(-22));
        System.out.println(Integer.toBinaryString(33));
//         00010110  --反-- 11101001 ---+1 ---   11101010 补码
//           00100001                            00100001
//                                               1 1101011 补码
//                                               1 1101010
//                                               1 0010101
    }
}
